"""
题目 2：异步任务调度（40 分）
题目描述
使用异步编程（asyncio）实现一个简单的任务调度系统。程序需创建 5 个异步任务，每个任务模拟不同耗时的操作（如计算、IO 等待），并按以下规则执行：
任务 1：计算 1 到 1000 的和（CPU 密集型）
任务 2：等待 2 秒（IO 密集型）
任务 3：计算 1000 的阶乘（CPU 密集型）
任务 4：等待 1 秒（IO 密集型）
任务 5：计算 1 到 5000 的和（CPU 密集型）
要求使用线程池执行 CPU 密集型任务，asyncio 执行 IO 密集型任务，并按实际完成顺序输出结果。
评分标准
异步框架搭建（10 分）：正确使用 asyncio 和线程池
任务分类与执行（15 分）：CPU 和 IO 任务正确分配到对应执行器
结果收集与输出（15 分）：按完成顺序输出结果，格式正确
"""
import asyncio
import concurrent.futures

# CPU密集型任务
def cpu_task1():
    return sum(range(1, 1001))

def cpu_task3():
    result = 1
    for i in range(1, 1001):
        result *= i
    return result

def cpu_task5():
    return sum(range(1, 5001))

# IO密集型任务
async def io_task2():
    await asyncio.sleep(2)
    return "Task 2 completed"

async def io_task4():
    await asyncio.sleep(1)
    return "Task 4 completed"

async def main():
    # 创建线程池执行CPU密集型任务
    with concurrent.futures.ThreadPoolExecutor() as executor:
        loop = asyncio.get_running_loop()

        # 提交CPU任务到线程池
        task1 = loop.run_in_executor(executor, cpu_task1)
        task3 = loop.run_in_executor(executor, cpu_task3)
        task5 = loop.run_in_executor(executor, cpu_task5)

        # IO任务直接由asyncio执行
        task2 = io_task2()
        task4 = io_task4()

        # 按完成顺序收集结果
        for future in asyncio.as_completed([task1, task2, task3, task4, task5]):
            result = await future
            print(f"完成任务: {result}")

# 运行主函数
asyncio.run(main())